﻿using Ewell.BizComponent.Service.Model.Insur.Request;
using Ewell.BizComponent.Service.Model.Insur.Response;
using Ewell.BizComponent.Service.Model.InterProxy;
using System.Collections.Generic;

namespace Ewell.BizComponent.Service.IServer
{
    public interface IInsurServer
    {
        /// <summary>
        /// 门诊收费正算后
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        /// <exception cref="SpeedException"></exception>
        void afterOutPay(RequestHeader header, OutPayAfterRequest request);
        /// <summary>
        /// 门诊挂号正算后
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        /// <exception cref="SpeedException"></exception>
        void afterOutRegister(RequestHeader header, OutRegisterAfterRequest request);
        /// <summary>
        /// 门诊收费正算前
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        /// <exception cref="SpeedException"></exception>
        OutPayResponse beforeOutPay(RequestHeader header, OutPayBeforeRequest request);
        /// <summary>
        /// 门诊挂号正算前
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        OutRegisterResponse beforeOutRegister(RequestHeader header, OutRegisterBeforeRequest request);
        /// <summary>
        /// 门诊收费预算取消
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        void cancelOutPayPreview(RequestHeader header, OutPayCancelPreviewRequest request);
        /// <summary>
        /// 门诊挂号预算取消
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        /// <exception cref="SpeedException"></exception>
        void cancelOutRegisterPreview(RequestHeader header, OutRegisterCancelPreviewRequest request);
        /// <summary>
        /// 门诊收费正算失败
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        void failOutPay(RequestHeader header, OutPayFailRequest request);
        /// <summary>
        /// 门诊挂号正算失败
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        /// <exception cref="SpeedException"></exception>
        void failOutRegister(RequestHeader header, OutRegisterFailRequest request);
        /// <summary>
        /// 是否需要读卡
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        NeedReadCardResponse GetNeedReadCard(RequestHeader header, NeedReadCardRequest request);
        /// <summary>
        /// 选择项初始化
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        List<DataSelectItemResponse> InitDataSelectItem(RequestHeader header, DataSelectItemInitRequest request);
        /// <summary>
        /// 门诊收费预算
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        /// <exception cref="SpeedException"></exception>
        OutPayResponse previewOutPay(RequestHeader header, OutPayPreviewRequest request);
        /// <summary>
        /// 挂号预算
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        /// <exception cref="SpeedException"></exception>
        OutRegisterResponse previewOutRegister(RequestHeader header, OutRegisterPreviewRequest request);
        /// <summary>
        /// 交易数据选择项检索
        /// </summary>
        /// <param name="header"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        List<BasicDataResponse> SearchDataSelectItem(RequestHeader header, DataSelectItemQueryRequest request);
    }
}